<template>
  <basic-container>
    <avue-crud
      ref="crud"
      :page.sync="page"
      :data="tableData"
      :table-loading="tableLoading"
      :option="tableOption"
      :permission="permissionList"
      @on-load="getList"
      @row-del="handleDel"
      @search-change="searchChange"
      @search-reset="searchReset"
    >
      <template slot="menuLeft">
        <el-button
          v-if="permissions.sys_log_del"
          class="filter-item"
          plain
          type="primary"
          size="small"
          icon="el-icon-download"
          @click="exportExcel"
        >导出
        </el-button>
        <el-button
          v-if="permissions.sys_log_del"
          class="filter-item"
          plain
          type="primary"
          size="small"
          icon="el-icon-remove"
          @click="handleDelLogs"
        >批量删除
        </el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>

<script>
import { delObj, delObjs, fetchList } from '@/api/admin/log';
import { tableOption } from '@/const/crud/admin/log';
import { mapGetters } from 'vuex';
import crudMixins from '@/mixins/crud';
export default {
  name: 'Log',
  mixins: [crudMixins],
  data() {
    return {
      tableOption: tableOption,
    };
  },
  computed: {
    ...mapGetters(['permissions']),
    permissionList() {
      return {
        delBtn: this.vaildData(this.permissions.sys_log_del, false),
      };
    },
  },
  methods: {
    getList(page = this.page, params = this.searchForm) {
      this.tableLoading = true;
      fetchList(
        Object.assign(
          {
            descs: ['create_time'],
            ascs: ['time'],
            current: page.currentPage,
            size: page.pageSize,
          },
          params,
          this.searchForm
        )
      ).then((response) => {
        this.tableData = response.data.data.records;
        this.page.total = response.data.data.total;
        this.tableLoading = false;
      });
    },
    handleDel: function (row) {
      this.$confirm('是否确认删除ID为"' + row.id + '"的日志?', '警告', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(function () {
          return delObj(row.id);
        })
        .then(() => {
          this.getList(this.page);
          this.$message.success('删除成功');
        });
    },
    handleDelLogs() {
      if (this.$refs.crud.tableSelect.length === 0) {
        this.$message.error('请选择日志后进行删除');
        return false;
      }
      const logIds = [];
      for (const row of this.$refs.crud.tableSelect) {
        logIds.push(row.id);
      }
      delObjs(logIds).then(() => {
        this.$notify.success('删除成功');
        this.$refs.crud.toggleSelection();
        this.refreshChange();
      });
    },
    exportExcel() {
      this.downBlobFile('/admin/log/export', this.searchForm, 'log.xlsx');
    },
  },
};
</script>
